#ifndef _MAC_H_
#define _MAC_H_

#include "stdint.h"
#include "string.h"

/**
 * @brief 报文 MAC 计算
 *
 * @param pDataIn      - 要计算的数据
 * @param DataSize     - 数据长度
 * @param pKeyIn       - 密钥
 * @param pMacData - 计算得出 MAC 值
 */
extern void Ansi99xGetMac(const uint8_t *pDataIn, uint16_t DataSize, const uint8_t *pKeyIn, uint8_t *pMacData);

/**
 * @brief MAC 计算（基于 DES）
 *
 * @param pDataIn      - 要计算的数据
 * @param DataSize     - 数据长度
 * @param pKeyIn       - 密钥
 * @param pInitValue   - 初始化数值
 * @param pMacData     - 计算得出 MAC 值
 */
extern void PbocDesMac(const uint8_t *pDataIn, uint16_t DataSize, const uint8_t *pKeyIn, const uint8_t *pInitValue, uint8_t *pMacData);

/**
 * @brief MAC 计算（基于 3DES）
 *
 * @param pDataIn      - 要计算的数据
 * @param DataSize     - 数据长度
 * @param pKeyIn       - 密钥
 * @param pInitValue   - 初始化数值
 * @param pMacData     - 计算得出 MAC 值
 */
extern void Pboc3DesMac(const uint8_t *pDataIn, uint16_t DataSize, const uint8_t *pKeyIn, const uint8_t *pInitValue, uint8_t *pMacData);

#endif
